﻿using System;

namespace _092_事件2
{
    public delegate void PriceChangedHandler(decimal oldPrice, decimal newPrice);
    public class Stock
    {
        string symbol;
        decimal price;
        public Stock(string symbol) { this.symbol = symbol; }
        public event PriceChangedHandler PriceChanged;
        public decimal Price
        {
            get { return price; }
            set
            {
                if (price == value) return; // 如果没有变化则退出
                decimal oldPrice = price;
                price = value;
                if (PriceChanged != null) // 如果调用列表不为空，引发事件
                    PriceChanged(price, value);
            }
        }
    }
    //本例中，如果把event关键字去掉，PriceChanged就变成了普通的委托字段，运行结果不变，但是，Stock类就没有原先健壮了，这时订阅者可以通过以下方式互相影响：
    //    通过重新指派PriceChanged替换其他的订阅者（不用+=运算符）
    //    清除所有的订阅者（将PriceChanged设置为null）
    //    通过调用其他委托，广播到其他订阅者。
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}